<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    /* 
    数组扁平化: 取出嵌套数组(多维)中的所有元素放到一个新数组(一维)中
      如: [1, [3, [2, 4]]]  ==>  [1, 3, 2, 4]

      [1, [2, 3]] => [1, 2, 3]
     */
    const arr = [1, [3, [2, 4]]]  // [1].concat([2, [3, 4]]) => [1, 2, [3, 4]]

    /* 
    使用递归: 数组的reduce + concat + some
    */
    function flatten(arr) {
      return arr.reduce((pre, item) =>{
        // 如果item是一个二维数组, 需要先将其转换为一维数组
        if (Array.isArray(item) && item.some(cItem => Array.isArray(cItem))) {
          // item = flatten(item)
          return pre.concat(flatten(item))
        }

        return  pre.concat(item)
      }, [])
    }
    console.log(flatten(arr))


    // [1, [3, 2]]  [].concat(1, [3, 2])  [1, 3, 2]
    function flatten2(arr) {
      // 只要有元素是数组, 就进入执行来降低一个维度
      while(arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr)
      }

      return arr
    }

    console.log(flatten2(arr));
    
  </script>
</body>
</html>